package controlador;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import vista.VentanaOrden;
import modelo.*;

public class ControladorVentanaOrden implements ActionListener {

	private VentanaOrden ventanaOrden;
	private ClienteDAO clienteDAO = new ClienteDAO();
	private CategoriaDAO categoriaDAO = new CategoriaDAO();
	private ProductoDAO productoDAO = new ProductoDAO();
	private OrdenDAO ordenDAO = new OrdenDAO();
	private float total=0;
	
	public ControladorVentanaOrden() {
		super();
		this.ventanaOrden = new VentanaOrden();
		this.ventanaOrden.setVisible(true);	
		this.ventanaOrden.addListener(this);	
		ventanaOrden.cargarComboCategoria(categoriaDAO.llenarComboCategoria());
		String nombrecategoria = ventanaOrden.getComboCategoria();
		ventanaOrden.cargarComboProducto(productoDAO.cargarComboProducto(nombrecategoria));
		ventanaOrden.setNoOrden(Integer.toString(ordenDAO.numeroOrden()));
	}
	
	private void RegistrarOrden(){
		try
		{
		    if(ventanaOrden.getCedula().equals("")|| 
		    		ventanaOrden.getNombre().equals("") || 
		    		ventanaOrden.getTotal().equals(""))
		    	ventanaOrden.mostrarMensaje("Debe llenar todos los datos para poder registrar la Orden");
		    else
		    {
		    	Cliente cliente = new Cliente(ventanaOrden.getCedula(), ventanaOrden.getNombre(), ventanaOrden.getDireccion(),1);
		    	clienteDAO.registrarCliente(cliente);
		    	
		    	DetalleOrdenDAO detalleordenDAO = new DetalleOrdenDAO();
		    	Orden orden = new Orden(ventanaOrden.getNoOrden(), ventanaOrden.getFecha(), ventanaOrden.getCedula(), Float.parseFloat(ventanaOrden.getTotal()), 1);
		    	ordenDAO.registrarOrden(orden);
		    	
			     int i=ventanaOrden.getDetalleOrden().getRowCount();
			       
			     for(int j=0; j<i;j++)
			     {
			    	DetalleOrden detalleorden = new DetalleOrden(ventanaOrden.getNoOrden(), String.valueOf(ventanaOrden.getDetalleOrden().getValueAt(j, 1)), Integer.parseInt(String.valueOf(ventanaOrden.getDetalleOrden().getValueAt(j, 3))));
			    	detalleordenDAO.registrarDetalleOrden(detalleorden);
			     }
			        ventanaOrden.mostrarMensaje("La Orden fue registrado con exito");
			    	ventanaOrden.borrarDatosOrden();
		    	}
		    	int nro = Integer.parseInt(ventanaOrden.getNoOrden())+1;
		    	ventanaOrden.setNoOrden(String.valueOf(nro));
			}catch(Exception e)
			{
				ventanaOrden.mostrarMensaje("No se pudo registrar la orden, verifique que los datos sean correctos");
				ventanaOrden.borrarDatosOrden();
			}
		}
	
	private void buscarCliente(){
		if(ventanaOrden.getCedula().equals(""))
			ventanaOrden.mostrarMensaje("Debe indicar el codigo del cliente");
		else{
			Cliente cliente = new Cliente();
		
			cliente = clienteDAO.busquedaCliente(ventanaOrden.getCedula());
		
			if(cliente == null)
				ventanaOrden.mostrarMensaje("El cliente no se encuentra registrado");
			else{
				ventanaOrden.setNombre(cliente.getNombre());
				ventanaOrden.setDireccion(cliente.getDireccion());
			}
		}
	}
	
	private void incluirProducto(){
			Producto producto = new Producto();
			String cantidadproducto = ventanaOrden.getCantidadProducto();
			//String nombre = ventanaOrden.getComboProducto();
			String codigoorden = ventanaOrden.getNoOrden();
			producto = productoDAO.busquedaProducto(ventanaOrden.getComboProducto());
			total = total+producto.getPrecio()*Integer.parseInt(cantidadproducto);
			float monto=0;
			monto=producto.getPrecio()*Integer.parseInt(cantidadproducto);
			ventanaOrden.setTotal(String.valueOf(total));
			ventanaOrden.getDetalleOrden().incluir(codigoorden, producto.getCodigoproducto(), producto.getDescripcion(), cantidadproducto, String.valueOf(producto.getPrecio()), String.valueOf(monto));
	}
	
	private void removerDetalle(){
		total-=Float.parseFloat(String.valueOf(ventanaOrden.getDetalleOrden().getValueAt(ventanaOrden.seleccionDetalleOrden(), 4)));
		ventanaOrden.setTotal(String.valueOf(total));
		ventanaOrden.getDetalleOrden().remover(ventanaOrden.seleccionDetalleOrden());
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		String nombrecategoria = ventanaOrden.getComboCategoria();
		ventanaOrden.cargarComboProducto(productoDAO.cargarComboProducto(nombrecategoria));
		if (actionCommand.equals("Buscar")) {
			buscarCliente();
		}		
		else if (actionCommand.equals("Aceptar")){
			incluirProducto();
		}
		else if (actionCommand.equals("Remover")){
			removerDetalle();
		}
		else if (actionCommand.equals("Guardar")){
			RegistrarOrden();
		}
		else if (actionCommand.equals("Cancelar")) {
			ventanaOrden.borrarDatosOrden();
		}
		else if (actionCommand.equals("Salir")){
			this.ventanaOrden.setVisible(false);
		}
	}

}